用`fs`命令批量获取文件夹和不同文件夹下的excel文件
本文作者:赵微微 河南大学经济学院
本文编辑:郭泽源
技术总编:方一卓
Stata and Python 数据分析
爬虫俱乐部Stata基础课程、Stata进阶课程和Python课程可在小鹅通平台查看,欢迎大家多多支持订阅!如需了解详情,可以通过课程链接(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或课程二维码进行访问哦~某小学的一到五年级共有九个班级,期中考试后,教务处主任想查看整体的成绩单,于是需要把九个班级的成绩单进行纵向合并,由于五个年级的成绩单分别在五个文件夹里,并且大多数文件夹下都不止一个excel文件,便让计算机老师赵老师用stata编程语言进行合并。 此次编程需要用到局部宏`local macros `、局部宏扩展函数`dir`、`foreach`循环、`fs` 等主要命令。局部宏`local macros `、`foreach`循环命令想来大家都已了熟于心,这里就不再介绍。
1.局部宏扩展函数dir的基本语法为:
local list :dir ["]dirname["] { dirs | files |other}["]pattern["] [, nofail respectcase]
其中,dirname为文件路径名称;dirs| files | other分别代表文件夹、常规文件、非常规文件;pattern为文件或文件夹样式;nofail表示若当前目录下含有太多文件名,则返回适合mname的文件名,而不报错;respectcase表示保留原有文件(夹)名称的大小写形式,否则英文字母默认输出为小写形式。
2.`fs`命令是stata的外部命令,所以在用之前需要先`ssc install fs`,`fs`命令可以列示指定路径下的指定类型的文件,并把结果存储在返回值`r(files)`中,本文就是利用fs的返回值进行循环,批量把excel导入stata。
在存储路径“D:\成绩单”下共有五个年级的文件夹,如下图所示:
先从一个文件夹出发,用`fs`命令获取文件夹里面的excel文件,执行以下程序:
clear all
cd D:\成绩单\一年级成绩单
fs *.xlsx
dis `r(files)'
得到输出结果:
其中,class1.xlsx、class2.xlsx存储在返回值`r(files)`中。
接下来利用`fs`命令的返回值`r(files)`进行批量获取该文件夹下的excel文件并另存为dta文件;
foreach f in `r(files)' {
import excel using `f', firstrow clear
save `f'.dta, replace
}
可以看到,在一年级成绩单文件夹下已经生成了两个dta文件:
再从多个文件夹出发,我们把这些文件夹的名称作为存储内容放入到宏dirs中,然后用`fs`命令批量获取不同文件夹里面的excel文件,执行以下程序:
clear all
cd D:\成绩单
local dirs: dir "." dirs "*",respectcase //用暂元提取所有文件夹名,windows系统需要加respectcase选项以区分大小写
dis `"`dirs'"'
得到输出结果:
clear all
cd D:\成绩单
local dirs: dir "." dirs "*",respectcase //用暂元提取所有文件夹名,windows系统需要加respectcase选项以区分大小写
dis `"`dirs'"'
foreach dir in `dirs' {
cd "./`dir'"
fs *.xlsx
dis `r(files)'
foreach f in `r(files)' {
import excel using `f', firstrow clear
save `f'.dta, replace
}
cd D:\成绩单
}
可以看到,在利用`fs`命令的返回值`r(files)`进行循环后,一年级至五年级成绩单文件夹下都生成了excel同名dta文件。
clear all
cd D:\成绩单
local dirs: dir "." dirs "*",respectcase //用暂元提取所有文件夹名,windows系统需要加respectcase选项以区分大小写
dis `"`dirs'"'
foreach dir in `dirs' {
cd "./`dir'"
fs *.xlsx
dis `r(files)'
foreach f in `r(files)' {
append using `f'.dta
}
cd D:\成绩单
*erase "./`dirs'/`dir'".dta
}
sort class student
save 纵向合并数据.dta, replace
export excel using 纵向合并数据.dta.xlsx, firstrow(variables) replace //输出为excel文件,并设置导出数据第一行为变量名
最后,在D盘的成绩单文件夹下,生成了九个班的纵向合并数据dta文件,我们再把它转化成excel文件,赵老师就可以给教务处主任交差啦!
重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:
最后,我们为大家揭秘雪球网(https://xueqiu.com/)最新所展示的沪深证券和港股关注人数增长Top10。
对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐自然语言处理之实例应用
JSON帮手,FeHelper
最新、最热门的命令这里都有!
Python实现微信自动回复告诉python,我想“狂飙”了——线程池与异步协程为爬虫提速高级函数——map()和reduce()Stata绘制条形图的进阶用法
快来看看武汉的房价是不是又双叒叕涨了!Python 常见内置函数(二)Stata绘制饼形图的进阶用法
Python标准库--logging模块盲区探索——Stata的读写极限Camelot提取PDF表格:一页多表、多页一表Stata绘图系列——条形图绘制
Python常见内置函数(一)Stata绘图系列——饼形图绘制【爬虫实战】深交所服务业年报数据“挂羊头卖狗肉”?
Python与excel交互--xlsxwriter模块关于我们
微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。
此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。